/*
 * p11210.cpp
 *
 *  Created on: 2013-10-24
 *      Author: zy
 */
#include<cstdio>
#include<cstring>
#include<cmath>
#include<iostream>
#include<string>
#include<vector>
#include<set>
#include<map>
#include<stack>
#include<queue>
#include<algorithm>
using namespace std;
//麻将数组
const char* mahjong[] =
{ "1T", "2T", "3T", "4T", "5T", "6T", "7T", "8T", "9T", "1S", "2S", "3S", "4S",
		"5S", "6S", "7S", "8S", "9S", "1W", "2W", "3W", "4W", "5W", "6W", "7W",
		"8W", "9W", "DONG", "NAN", "XI", "BEI", "ZHONG", "FA", "BAI" };

int convert(char *s) //将牌映射成数字编号方便处理
{
	for (int i = 0; i < 34; i++)
		if (strcmp(mahjong[i], s) == 0)
			return i;
	return 0;
}
int c[34];//存储每张牌的个数

bool dfs(int dep)//dep表示已经找到的刻子或顺子数目，共需要找到4对
{
	for (int i = 0; i < 34; i++)//刻子
		if (c[i] >= 3)
		{
			if (dep == 3)//已经找到三对牌
				return true;
			c[i] -= 3;
			if (dfs(dep + 1))
				return true;
			c[i] += 3;
		}
	for (int i = 0; i <= 24; i++)
		if (i % 9 <= 6 && c[i] >= 1 && c[i + 1] >= 1 && c[i + 2] >= 1)
		{
			if (dep == 3)
				return true;
			c[i]--;
			c[i + 1]--;
			c[i + 2]--;
			if (dfs(dep + 1))
				return true;
			c[i]++;
			c[i + 1]++;
			c[i + 2]++;
		}
	return false;
}

bool check()
{
	int i;
	for (int i = 0; i < 34; i++)//枚举将牌
		if (c[i] >= 2)
		{
			c[i] -= 2;
			if (dfs(0))
				return true;
			c[i] += 2;
		}
	return false;
}

int main()
{
	int cas = 0;
	bool ok;
	char s[100];
	int mj[15];
	while (scanf("%s", s) != EOF)
	{
		if (s[0] == '0')
			break;
		printf("Case %d:", ++cas);
		mj[0] = convert(s);
		for (int i = 1; i < 13; i++)
		{
			scanf("%s", s);
			mj[i] = convert(s);
		}
		ok = false;
		for (int i = 0; i < 34; i++)
		{
			memset(c, 0, sizeof(c));
			for (int j = 0; j < 13; j++)
				c[mj[j]]++;
			if (c[i] >= 4)
				continue;
			c[i]++;
			if (check())
			{
				ok = true;
				printf(" %s", mahjong[i]);
			}
			c[i]--;
		}
		if (!ok)
			puts(" Not ready");
		else
			puts("");
	}
	return 0;
}
